﻿from django import forms
from PIL import Image
from django.contrib.auth.models import User
from forum.models import Autor
import re

class PrzypHaslo(forms.Form):
	pseudo = forms.CharField(max_length=20, min_length=1, error_messages={'required': 'Podaj nazwełę projektu!'})
	email = forms.EmailField(max_length=50, min_length=5, error_messages={'required': 'Podaj e-mail, kontaktowy', 'invalid':'Nieprawidłowy e-mail'})
	

class NowyProjekt(forms.Form):
	pseudo = forms.CharField(max_length=20, min_length=1, error_messages={'required': 'Podaj nazwełę projektu!'})
	haslo1 = forms.CharField(widget=forms.PasswordInput, max_length=15, min_length=5, error_messages={'required': 'Hasło wymagane'}, label='Hasło') 
	haslo2 = forms.CharField(widget=forms.PasswordInput, max_length=15, min_length=5, error_messages={'required': 'Potwierdź hasło'}, label='Hasło(potwierdź)') 
	email = forms.EmailField(max_length=50, min_length=5, error_messages={'required': 'Podaj e-mail, kontaktowy', 'invalid':'Nieprawidłowy e-mail'})
	avatar = forms.ImageField(label='avatar(max:1000x1000)', error_messages={'required':'Niebieski musi mieć avatar! (spoko, potem go sobie zmienisz jakby co)', 'invalid_image':'Nieprawidłowe plike graficzne. To ma być jotpeg albo coś w tym stylu'})
	def clean_avatar(self):
		avt = self.cleaned_data['avatar']
		img = Image.open(avt)
		x, y = img.size
		if x>1000 or y>1000 or x<50 or y<50:
			raise forms.ValidationError(('Zle wymiary avatra. Max 1000px na 1000px. Min 50px na 50px'))  
		return avt
	def clean_haslo2(self):
		haslo1 = self.cleaned_data['haslo1']
		haslo2 = self.cleaned_data['haslo2']
		if haslo1 != haslo2:
			raise forms.ValidationError(('Masz kupę między palcami? Wpisz potwierdzenie jeszcze raz, tym razem poprawnie'))  
		return haslo2
	def clean_pseudo(self):
		pseudo = self.cleaned_data['pseudo']
		if User.objects.filter(username=pseudo).count()!=0:
			raise forms.ValidationError(('Ta nazwa jest już zajęta'))
		return pseudo
		
		
class EdycjaProjekt(forms.Form):
	req = None
	haslo1 = forms.CharField(required=False, widget=forms.PasswordInput, max_length=15, min_length=5, error_messages={'required': 'Hasło wymagane'}, label='Nowe hasło') 
	haslo2 = forms.CharField(required=False, widget=forms.PasswordInput, max_length=15, min_length=5, error_messages={'required': 'Potwierdź hasło'}, label='Nowe hasło(potwierdź)') 
	
	pseudo = forms.CharField(required=False,
								max_length=20,
								min_length=1,
								)
	email = forms.EmailField(required=False, 
								max_length=50,
								min_length=5,
								error_messages={'required': 'Podaj e-mail, kontaktowy',
												'invalid':'Nieprawidłowy e-mail'})
												
	stopka = forms.CharField(max_length=300,
								required=False,
								widget=forms.Textarea,
								error_messages={'max_length':'max 300 znaków dla stopełły'})
	avatar = forms.ImageField(required=False,label='avatar(max:1000x1000)',
								error_messages={'required':'Niebieski musi mieć avatar!',
												'invalid_image':'Nieprawidłowe plike graficzne. To ma być jotpeg albo coś w tym stylu'})

	def clean_haslo2(self):
		haslo1 = self.cleaned_data['haslo1']
		haslo2 = self.cleaned_data['haslo2']
		if haslo1 != haslo2:
			raise forms.ValidationError(('Masz kupę między palcami? Wpisz potwierdzenie jeszcze raz, tym razem poprawnie'))  
		return haslo2
	


	def clean_avatar(self):
		avt = self.cleaned_data['avatar']
		if avt:
			img = Image.open(avt)
			x, y = img.size
			if x>1000 or y>1000 or x<50 or y<50:
				raise forms.ValidationError(('Zle wymiary avatra. Max 1000px na 1000px. Min 50px na 50px'))  
		return avt
	def clean_stopka(self):
		a = self.cleaned_data['stopka']
		if len(re.compile(u'\n').findall(a)) > 10:
			raise forms.ValidationError(('Unikame rozbudowanych stopek, maksymalnie 10 znaków nowej lini'))
		return a
	def clean_pseudo(self):
		autor = self.req.user.get_profile()
		if Autor.objects.filter(pseudo=self.cleaned_data['pseudo']).exclude(pseudo=autor.pseudo).count() !=0:
			raise forms.ValidationError(('Nazwa jest już zajęta przez niebieskiego, lub była używana w przeszłości'))
		return self.cleaned_data['pseudo']

class NowyTemat(forms.Form):
	req = None
	autor = forms.CharField(	max_length=30,
								min_length=1,
								error_messages={'required': 'Musisz tu coś wpisać!'}
								)
	temat = forms.CharField(	max_length=80,
								min_length=1,
								error_messages={'required':'Wpisz tu coś na miłość boską!'}
								)
	tresc = forms.CharField(max_length=2000,
								widget=forms.Textarea(attrs={'onkeyup':'zliczaj_znaki(this.form)',
															'onkeydown':'zliczaj_znaki(this.form)'}),
								error_messages={'max_length':'max 2000 znakuff!',
												'required':'Wpisz tu coś na miłość boską!'})
	def clean_autor(self):
		autor = self.cleaned_data['autor']
		if self.req.user.is_authenticated():
			login = self.req.user.get_profile()
			if  Autor.objects.filter(pseudo=autor).filter(user__isnull=False).exclude(pseudo=login.pseudo).count()!=0:
				raise forms.ValidationError(('Nazwa jest już zajęta przez niebieskiego'))
			return autor
		else:
			if  Autor.objects.filter(pseudo=autor).filter(user__isnull=False).count()!=0:
				raise forms.ValidationError(('Nazwa jest już zajęta przez niebieskiego'))
			return autor
			
class NowaOdpowiedz(forms.Form):
	req = None
	autor = forms.CharField(	max_length=30,
								min_length=1,
								error_messages={'required': 'Musisz tu coś wpisać!'}
								)
	tresc = forms.CharField(max_length=2000,
								widget=forms.Textarea(attrs={'onkeyup':'zliczaj_znaki(this.form)',
															'onkeydown':'zliczaj_znaki(this.form)'}),
								error_messages={'max_length':'max 2000 znakuff!',
												'required':'Wpisz tu coś na miłość boską!'})
	def clean_autor(self):
		autor = self.cleaned_data['autor']
		if self.req.user.is_authenticated():
			login = self.req.user.get_profile()
			if  Autor.objects.filter(pseudo=autor).filter(user__isnull=False).exclude(pseudo=login.pseudo).count()!=0:
				raise forms.ValidationError(('Nazwa jest już zajęta przez niebieskiego'))
			return autor
		else:
			if  Autor.objects.filter(pseudo=autor).filter(user__isnull=False).count()!=0:
				raise forms.ValidationError(('Nazwa jest już zajęta przez niebieskiego'))
			return autor
